//
// @author 风杨
// @date 22-9-14 上午10:38
// @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
//
use config::{Config, Map, Value};
use log::info;

use crate::r#const::*;

static mut CONFIG: Option<Config> = None;

/// 初始化
pub fn init_config() {
    unsafe {
        if CONFIG.is_some() {
            return;
        }
    }

    let config = Config::builder()
        .add_source(config::File::with_name(CONFIG_YAML))
        .build()
        .unwrap();

    unsafe {
        CONFIG = Some(config);
    }
}

/// 获取配置对象。 返回对象为  &Config
pub fn get_config() -> &'static Config {
    unsafe {
        CONFIG.as_ref().expect("config not initialized!")
    }
}

/// 获取配置key对应的值。 返回对象为 String
pub fn get_value(key: &str) -> String {
    get_config().get_string(key)
        .unwrap()
}

#[test]
fn test_load_config() {
    init_config();

    let config = get_config();

    // let url = config.get_string(KEY_REDIS_HOSTNAME)
    //     .unwrap();
    // assert!(url.len() > 0);
    // assert_eq!(url, "127.0.0.1");
    //
    // let redisMaps = config.get_table("redis")
    //     .unwrap();
    // assert!(redisMaps.len() > 0);
    // println!("redisMaps: {:#?}", redisMaps.clone());
    //
    // let _a = redisMaps.into_iter()
    //     .map(|(k, v)|
    //         (k, v.into_string().unwrap()));
    // println!("{:#?}", _a);
    //
    // let userName: String = get_value(KEY_REDIS_PORT);
    // assert_eq!(userName, "6379");
}
